/*
 ============================================================================
 Page	     : 553-554
 Name        : qsorter.c
 Date	     : 20210408
 Author      : Hbue 18060333
 Copyright   : Your copyright notice
 Description : 用qsort()排列一组数字
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

#define NUM 40
void fillarray(double array[],int n);
void showarray(const double array[], int n);
int mycomp(const void *p1, const void *p2);

int main(void)
{
	double vals[NUM];
	fillarray(vals, NUM);
	puts("Random list:");
	showarray(vals, NUM);
	qsort(vals, NUM, sizeof(double), mycomp);
	puts("\nSorted List:");
	showarray(vals, NUM);

	return 0;
}

void fillarray(double array[],int n)
{
	for(int index = 0; index < n; index++)
	{
		array[index] = (double)rand() / ((double)rand() + 0.1);
	}
}

void showarray(const double array[], int n)
{
	for(int index = 0; index < n; index++)
	{
		printf("%9.4f ", array[index]);
		if(index % 10 == 9)
		{
			putchar('\n');
		}
	}
	if(n % 10 == 0)
	{
		putchar('\n');
	}
}

/* 按从小到大的顺序排序 */
int mycomp(const void *p1, const void *p2)
{
	/* 要使用指向double的结构来访问这两个值 */
	const double *a1 = (const double *)p1;
	const double *a2 = (const double *)p2;

	int result = *a1 > *a2 ? 1 : *a1 == *a2 ? 0 : -1;
	return result;
}

